home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 17
/
AMIGAplus Sonderheft 17 (1999)(ICP)(DE)[!].iso
/
PD
/
Anwendungen
/
-DataTypes-
/
mpegvideo
/
mpegvideo.datatype.doc
< prev
next >
Wrap
Text File
|
1998-06-17
|
54KB
|
1,277 lines
TABLE OF CONTENTS
mpegvideo.datatype/--datasheed--
mpegvideo.datatype/ADTM_LOADFRAME
mpegvideo.datatype/ADTM_UNLOADFRAME
mpegvideo.datatype/DTM_WRITE
mpegvideo.datatype/MAIN
mpegvideo.datatype/OM_DISPOSE
mpegvideo.datatype/OM_NEW
mpegvideo.datatype/preferences
mpegvideo.datatype/--datasheed-- mpegvideo.datatype/--datasheed--
NAME
mpegvideo.datatype -- data type for mpeg video streams
SUPERCLASS
animation.datatype
DESCRIPTION
The mpegvideo data type, a sub-class of the animation.datatype, is
used to load, play and save (encode) mpeg 1 and mpeg 2 video
streams.
METHODS
OM_NEW -- Create a new animation object from a description file. The
source may a file or no source (e.g. an empty object created
with DTST_RAM for encoding etc.).
OM_DISPOSE -- Dispose instance and contents (frames, colormaps etc.),
then pass msg to superclass
OM_UPDATE -- Perform an ICM_CHECKLOOP check, and if succesfull, the
method will be executed like OM_SET downstairs.
OM_SET -- Pass msg to superclass, and if the mpegvideo.datatype
instance is the "top instance", call GM_RENDER if retval from
superclass was != 0UL.
DTM_WRITE -- Saves either the local (RAW) format, which is
a MPEG1/2-Video-stream, or passes the message to superclass
(which saves the current frame as an IFF ILBM picture).
ADTM_LOADFRAME -- Fill in struct adtFrame with requested information
from internal FrameNode list like bitmap, colormap, samples, etc.
ADTM_UNLOADFRAME -- Release resources obtained in a successfull or
unsuccessfull call to ADTM_LOADFRAME.
All other methods are passed unchanged to superclass.
ATTRIBUTES
Following attributes are set by the object and are READ-ONLY for
applications:
DTA_NominalHoriz -- same as ADTA_Width
DTA_NominalVert -- same as ADTA_Height
DTA_ObjName -- same as DTA_Name
ADTA_Width -- set by video stream
ADTA_Height -- set by video stream
ADTA_Depth -- set by video stream (or by prefs)
ADTA_NumColors -- set by ADTA_Depth or to the num. of
palette entries
ADTA_ColorRegisters -- obj's palette with ADTA_NumColors entries
ADTA_CRegs -- obj's palette with ADTA_NumColors entries
ADTA_Frames -- total number of frames
ADTA_FramesPerSecond -- set by video stream
ADTA_ModeID -- calculated internally or set by prefs
ADTA_KeyFrame -- key frame
ADTA_Sample -- sample (optional, if a sample is attached)
ADTA_SampleLength -- sample length (for one timestamp/see above)
ADTA_Period -- sample period (optional, see ADTA_Sample)
ADTA_Volume -- sample volume (optional, see ADTA_Sample)
ADTA_Cycles -- 1UL
BUGS
- animation.datatype >= V41.3 is preferred...
WARNING: NOLOADALL mode MUST NOT be used with animation.datatype
V40 (it's safe, but...).
- EHB, COLOR, and GRAY dithering are broken
- YUV420 dithering (using Picasso 96 yuv-bitmaps) isn't tested yet.
- The DEVICE option for using a cd32mpeg.device-compatible device for
decoding isn't tested yet.
- NOLOADALL mode has some funny effects: If you press the play button,
I'll take some time until playback starts. This is caused
by animation.datatype which pre-fetches the first ~10 frames
before starting the playback. This is not a bug !
The PPC version should not have this problem.
- NOLOADALL mode does not work with the most mpeg2-streams
(no interlace support in NOLOADALL mode).
- NOLOADALL mode has problems with loading the last frame sequence.
- Index generation in NOLOADALL mode is buggy, which results
in a (somtimes) very confused decoder.
(I-Frame-ONLY streams should work perfectly...).
- In interlaced mpeg streams (mpeg 2 only) the first frame isn't
decoded properly.
- Interlaced mpeg streams (mpeg 2 only) cannot be scaled properly
using the WIDTH and HEIGHT prefs options.
- The DITHERATPLAYBACKTIME causes that the key frame is not filled
with the initial frame data at OM_NEW time.
- The datatype allocates much more memory than really used.
- In large videos, the frames at the end will be played slower than
those at the beginning of the file. This is the result of the
sequential search internally used (only serious with more than
25000 frames (mc68030/50mhz)) for scanning the internal index list.
Will be fixed.
- CyberGFX 24 bit output mode uses 32 bit ARGB bitmaps, but the A
(alpha) byte is not set to 0xFF (visible), instead it is set to 0.
The same for 15 bit output mode, where the MSB is a alpha mask bit.
- If you don't have my "paranimdtcpatch" patch running,
animation.datatype (animation.datatype 40.7 (28.09.93)) subclasses
will suffer under timing problems when two or more
animation.datatype objetcs are playing. I've released a matching
patch, DON'T blame me for this bug. Any comments for this problem
should be related to the "paranimdtcpatch" project.
"paranimdtcpatch" is available in the aminet
("util/dtype/panimdtcptch012.LhA").
NOTE that animation.datatype V41 does NOT require the patch
anymore.
- The encoder aligns the width of the animation to be divisible by
two.
- The PPC version is slow because both (m68k and PPC) caches
are flushed for each AmigaOS call, which slows down the thing
significantly.
- NOBFRAMES / NOPFRAMES option seems to slow down the decoder
(unneccesary) due an inefficient piece in the bit parsing code.
Will be fixed soon.
- The duration values in the ADTM_LOADFRAME/struct adtFrame message
are not correct. The duration value belongs to the previous frame.
Due the fact that the duration value is mainly the same (skipping
B frames means (normally) that everytimes the same number of
frames is skiped), this is not a problem (yet) for the NOBFRAMES
option and MPEG-1.
Will be fixed soon.
- The PPC version sometimes hangs with ppc.library V45.20.
Try a later ppc.library version.
TODO
- Code cleanup
- Bug fixing
- Writing an amigaguide document
- Support for 24 bit planar bitmaps in the encoder
- Interleaved planar bitmap output
- Update the IDCT to avoid unneccesary table accesses.
HISTORY
V2.1
First testing release, mainly to find some bugs...
V2.2
- ADTA_SampleLength calculations were wrong. The value was got
from the first frame. Now the value is set correctly to
alf_SampleLength / (alf_Duration + 1)
Fixed.
- The encoder (and maybe other parts) did not like planar
interleaved bitmaps because the internal CopyBitMap
function expected evertimes a non-interleaved bitmap.
(I replaced the functions with the functions used in
animation.datatype V41.5 to fix the bug...).
Fixed.
- If a ADTM_LOADFRAME method gets a message from a previous
ADTM_LOADFRAME call, the contents are freed now after
the requested data have been loaded. This avoids the
pathological case that if the same frame (or one from a
matching IBBP...I sequence) should be freed and returned
the frame IS freed and then re-loaded.
Now the free of the given frame is done after the loading
of the requested frame which avoids this inefficienty.
- The encoder is now faster during loading of frames because
it now processes and converts RGB -> YUV line by line
instead of block by block base.
The reason is that the new way uses a cache more efficient
then the previous method.
- Decreased the minimum decoder buffer size down to 2048 bytes,
which makes the progress gauge more accurate for small files.
- Fixed the bug that the encoder treats mpeg timestamp as
animation.datatype timestamp. Now the conversion is donre using
animdtc_timestamp = mpeg_frame_ts /
(mpeg_frame_rate / ADTA_FramesPerSecond);
Fixed.
- The encoder now allocates some resouces once in the init setup
instead of allocating/freeing them per-frame.
- Fixed the bug that if the loading of a frame failed that this
frame wasn't free'd using ADTM_UNLOADFRAME.
- The encoder now recognizes ADTM_Frame (startframe) and
ADTM_Frames (number of frames to encode).
- The encoder now supports palette-per-frame, e.g. colormap
changes in the source animation.
- The encoder now uses "realloc" like-loading from source object
(e.g. that ADTM_LOADFRAME can re-use the data from a previous
ADTM_LOADFRAME call).
This can be turned off using the ENC_NO_REALLOC_LOADFRAME prefs
switch.
- Implemented frame rate code 9. The XING products use this rate
code as 15 fps.
- The encoder now selects the "best" FPS rate, e.g. which mpeg fps
rate is the nearest to the source fps rate.
This includes the rate code 9 (XING 15 fps rate code) !
- Fixed the default ENC_BIT_RATE value. It now defaults to
(ADTA_Width * ADTA_Height * 24 * mpeg_fps) / 52.8,
which results in 1152000.0 bits/s for 352 * 288 (SIF) display.
(e.g. the default compression ration is 52.8).
Fixed.
- If CyberGFX is active some output formats now create
chunkypixel output (currently ORDERED and GRAY output mode
which create LUT8 bitmaps in this case).
(Suggested by Ralf Heinert (frodo@w-specht.rhein-ruhr.de)).
- Implemented MONO and MONO_THRESHOLD dithering. Interlaced
MPEG streams are not supported yet.
- Little speedup for all dithering modes which use the Y data
only (MONO#? and GRAY dithering, ORDERED dithering if
CR_RANGE and CB_RANGE are both 1).
- CyberGFX bitmap output in conjunction with the USEVMM switch
now forces the DITHERATPLAYBACKTIME switch to be sure that
the datatype really uses VMM memory to cache frame data.
- If no prefs-file is found, a warning is printed and VERBOSE
mode is forced.
This should avoid some emails like "I didn't know that the
datatype has a prefs-file...".
- Ported the whole datatype to the PPC environment:
- All structures shared between m68k and PPC side have
been padded to get the same size and offsets for all
structure members. A small C program which prints
the offsets was used for fiddeling out these things.
- I introduced some own library functions to pack multiple
AmigaOS calls into one PPCCallOS-call to save cache
flushing cycles.
- Extensive testing to get rid of some little problem.
- Wrote some interface functions for PPC task support.
- Removed some table accesses, removed and updated some parts
to match the SAS/C PPC needs.
- Frank Mariak (fmariak@chaosengine.ping.de) ported the HAM
code from m68k assember to C that this can be used on the
PPC side.
Thanks !
- Fixed a bug in the encoder's motion estimation section
which caused quality loss.
Fixed.
V2.3
- PPC version recompiled with SAS/C PPC beta 14.
- Switched to ppc.library V45.9, which fixes some problems in
the PPCCallOS function...
- Optimized some PPC AmigaOS stub functions by hand to get more
speed; replaced some functions by their PPC kernel equivalents
for the same reason.
- Chunkypixel bitmap allocation (AllocBitMap) now gets the
ADTA_KeyFrame keyframe bitmap as parameter.
Maybe, the RTG software can do something usefull with this
hint...
- Fixed HAM dithering code. The used abs()-macro was wrong,
I replaced it with SAS/C build-in abs macro call.
Thanks to Frank Mariak (fmariak@chaosengine.ping.de) for
fixing the bug.
Fixed.
- Major speed up in the YUV420 and YUV 422 non-interlaced ->
truecolor code
I seperated both parts to get the maximum performance in both
parts.
- Fixed a bug in the interlaced remapping section (MPEG-2 only)
which caused the display jittering more than "required".
Fixed.
- Fixed a bug in the "smakefile" which caused that the autodoc
file "mpegvideo.datatype.doc" missed the "preferences"
section and other things...
Thanks to Frederic Steinfeld (fsteine@iiic.ethz.ch) for reporting
the problem...
Fixed.
- Minor fixes in the autodocs.
- Speedup in the CyberGFX output modes: The dither routines now
writes directly into the chunkymaps instead of using a temporary
buffer.
- Added code which checks if it is possible to skip the
LockBitMap/UnLockBitMap protocoll. If it is possible (in the case
of CyberGFX), bitmaps are accessed througth (bm -> Planes[ 0 ])
directly.
- Major speedup in the encoder. IMHO it is now twice as fast as
in V2.2...
V2.4
- Fixed a bug which caused big trouble with CyberGFX.
Starting with V2.3, mpegvideo.datatype's decoder allocates
chunkypixel bitmaps with the ADTA_KeyBitMap as friend bitmap
(the RTG-software should be forced to allocate all bitmaps from
the same type/chunk of memory).
Due a missing BMF_MINPLANES CyberGFX returned a planar bitmap,
which wasn't expected here.
Changes to fix this bug:
- Set BMF_MINPLANES in AllocBitMap's flag field.
- The returned bitmap is tested using GetCyberMapAttr if
it has _really_ the requested pixelformat.
Thanks to Frank Mariak (fmariak@chaosengine.ping.de) for his
help...
Fixed.
- The decoder now works with PIPE: as input again, as requested by
many people. Still requires that the DataType is set by the
user because the datatypes.library file type identification code
(ObtainDataTypeA) does not work on non-seekable streams.
Usage:
GMultiView DATATYPE="MPEG Video" FILE="x.m1v"
Fixed.
- Any attempt to use the NOLOADALL mode on a non-seekable stream
(PIPE: for example) now results in an error message and
forces the LOADALL mode.
- Minor fixes in the autodocs.
V2.5
- PPC version recompiled with SAS/C PPC beta 22.
- Minor fixes to match the new SAS/C ppc beta 22.
- The PPC version now requires a mc68040 as "companion" processor.
This change was done because Phase5 dropped the m68030/PPC boards.
- Found a serious bug in the #?ieee versions of mpegvideo.datatype
(e.g. 000ieee/ and 020ieee/) which seems to be present in all V2
versions...:
The startup code did not open mathieeedoubtrans.library, which is
used by the "sqrt" function in the dct table setup.
Thanks to Chris McVeigh (escom4@escom4.demon.co.uk) for reporting
the problem.
Fixed.
- The p96.library is now opened before the cybergraphics.library
because the p96.library can be opened WITHOUT any gfx-card
present. This allows to get access to the 24-bit-chunky-bitmaps.
You may not be able to view them, but tools like "DTConvert"
may benefit from this...
- The PPC-Version now checks ppc.library's revision field
(must be at least rev 13 (yet), current development was done with
ppc.library V45.20, V46 preferred), except the version field
is > V45. This fixes crashes if someone tries an earlier
version...
Fixed.
- Added an alert (AN_Unknown + 0x531) and an endless loop in the
_XCEXIT stub code. This code should never be called, but if
the case occurs (should not, should not), the system won't crash
now. Only the application hangs, and a little bit informative
alert occurs.
Should never ever happen, but...
- Big change in the PPC decoder launch: Instead of creating a
process per "frame decoding sequence" now the decoder starts one
ppc task at startup and sends the decoding jobs as messages to
it on demand. This is much more efficient and faster than the
old way.
Still experimental, but works.
The NOLOADALL mode (and the DITHERATPLAYBACKTIME option, too)
now makes much more fun...
- The PPC code is now compiled with SAS/C's HUNKOBJ mode, which
makes the compilation/project build much easier...
- DITHER=MONO_THRESHOLD now uses lum > 127 instead of lum > 128 as
the way to choose between black or white. Now both back and white
have the same range of values.
Another benefit is that the compiler maybe can use the change to
optimize the code much more...
- Found and fixed the bug that the NOBFRAMES / NOPFRAMES options
did not work.
Fixed.
- NOBFRAMES / NOPFRAMES options are now compatible with the
NOLOADALL mode.
- Changes in the encoder and encoder support code.
The encoder is now faster; it now reaches ~80% of the maximum
possible speed (the remaining 20% are (maybe) a victim of the
cacheflushed required for PPCCallOS calls :-( ).
NOTES
- Time-codes in the GOP are ignored - which isn't serious here
yet.
- Not all parameters in a given "mpeg2enc"-like parameter file
are recognized by the encoder because the information is
directly got from the object (like width, height, copyright
info etc.).
Other things like scalability are not implemented yet.
SEE ALSO
animation.datatype,
mpegsystem.datatype, mpegaudio.datatype
picmovie.datatype,
paranimdtcpatch
mpegvideo.datatype/ADTM_LOADFRAME mpegvideo.datatype/ADTM_LOADFRAME
NAME
ADTM_LOADFRAME -- Load frame
FUNCTION
The ADTM_LOADFRAME method is used to obtain the bitmap and timing
data of the animation.
The given timestamp will be used to find the closest timestamp
in stream. If it was found, the corresponding timing, bitmap,
colormap and sound data are stored into the struct adtFrame.
In NOLOADALL mode, missing frame data are dynamically loaded
from the stream.
NOTE
In NOLOADALL mode mpegvideo.datatype always loads a
whole IPPB...I sequence into memory; the sequence stays in memory
until all frames of the sequence are unloaded.
RESULT
Returns non-zero if the frame was loaded, 0UL otherwise
(Result2 (IoErr()) contains then the cause).
mpegvideo.datatype/ADTM_UNLOADFRAME mpegvideo.datatype/ADTM_UNLOADFRAME
NAME
ADTM_UNLOADFRAME -- Unload frame contents
FUNCTION
The ADTM_UNLOADFRAME method is used to release the contents of a
animation frame.
This method frees the bitmap data found in adtFrame.
RESULT
Returns always 0UL.
mpegvideo.datatype/DTM_WRITE mpegvideo.datatype/DTM_WRITE
NAME
DTM_WRITE -- Save data
FUNCTION
This method saves the object's contents to disk.
If dtw_Mode is DTWM_IFF, the method is passed unchanged to the
superclass (animation.datatype), which writes a single IFF ILBM
picture.
The local data format (e.g. dtw_Mode == DTWM_RAW) writes
a mpeg video stream, as set by the prefereces.
RESULT
Returns 0 for failure (IoErr() returns result2), non-zero
for success.
SEE ALSO
preferences section for encoder options
mpegvideo.datatype/MAIN mpegvideo.datatype/MAIN
INTRODUCTION
Datatypes class for decoding/encoding MPEG Video streams (MPEG 1
and MPEG 2).
REQUIREMENTS
- You need at least Kick/WB 3.0.
- "datatypes/animation.datatype", >= V40 (V41 preferred)
which requires itself some libraries/boopsi classes:
- "realtime.library", >= V39 - for timing
- "gadgets/tapedeck.gadget" (any version) - for the controls
- ppc.library >= V45 rev 13 for the PPC version
(It was developed with V45.20...)
- 2 MB of memory (3 MB for the PPC version)
USAGE
If the datatypes descriptor file was activated, any attempt to load
a MPEG Video stream using GMultiView, MultiView, AmigaGuide or
SwitchWindow will load and play the movie.
INSTALLATION
After unpacking this archive:
Because this version does not include an Installer script, you have
to do the installation manually through the shell:
- Unpack this archive and copy the "mpegvideo.datatype" to
SYS:Classes/DataTypes/:
Copy CLONE FROM "mpegvideo.datatype" TO
"SYS:Classes/DataTypes/mpegvideo.datatype"
The "mpegvideo.datatype" class library is available in different
versions for different cpu versions:
directory | cpu type (minimum requirements)
-----------+--------------------------------------
000ieee/ | m68000 using IEEE math library
020ieee/ | m68020 using IEEE math library
020881/ | m68020 using 68881 FPU
040881/ | m68040 using 68881 FPU emulation code
060881/ | m68060 using 68881 FPU emulation code
040ppc/ | m68040 and a PowerPC cpu
Use the "C:CPU" shell command to check which m68k version you need.
- Then copy the datatypes descriptor into the DEVS:DataTypes
directory.
If the descriptor already exists, you should not replace it,
otherwise you may loose "toolnodes" and other settings stored in
the existing descriptor.
Copy CLONE FROM "MPEG Video(%|.info)" TO DEVS:Datatypes/
NOTES
Both encoder and decoder loosely based on "mpeg2dec" and "mpeg2enc"
of the MSSG. See http://www.mpeg.org.
AUTHOR
If you want to blame me, report any bugs, or wants a new version
send your letter to:
Roland Mainz
Hohenstaufenstraße 8
52388 Nörvenich
GERMANY
Phone: (+49)(0)2426/901568
Fax: (+49)(0)2426/901569
EMAIL is also available (if you want to send me attachments
larger than 1MB (up to 5MB, more with my permission):
GISBURN@w-specht.rhein-ruhr.de
Up to August 1998 I'm reachable using this email address, too:
Reinhold.A.Mainz@KBV.DE
| Please put your name and address in your mails !
| German mailers should add their phone numbers.
| See BUGS section above when submitting bug reports.
Sorry, but I can only look once a week for mails.
If you don't hear something from me within three weeks, please
send your mail again (but watch about new releases) (problems with
this email port are caused by reconfigurations, hackers, network
problems etc.).
The entire "mpegvideo.datatype" package may be noncommercially
redistributed, provided that the package is always distributed
in it's complete form (including it's documentation). A small
copy fee for media costs is okay but any kind of commercial
distribution is strictly forbidden without my permission !
Comments and suggestions how to improve this program are
generally appreciated!
Thanks to David Junod, who wrote the animation.datatype and lots of
the datatypes example code, Matt Dillon for his DICE,
Olaf 'Olsen' Barthel and Frank Mariak for their help, Phase5 for
their PPC board.
mpegvideo.datatype/OM_DISPOSE mpegvideo.datatype/OM_DISPOSE
NAME
OM_DISPOSE -- Delete a mpegvideo.datatype object.
FUNCTION
The OM_DISPOSE method is used to delete an instance of the
mpegvideo.datatype class. This method is passed to the superclass
when it has completed.
This method frees all frame nodes and their contents (pictures, their
colormaps, sounds etc.).
NOTE
This method preserved Result2 (IoErr()).
RESULT
The object is deleted. 0UL is returned.
mpegvideo.datatype/OM_NEW mpegvideo.datatype/OM_NEW
NAME
OM_NEW -- Create a mpegvideo.datatype object.
FUNCTION
The OM_NEW method is used to create an instance of the
mpegvideo.datatype class. This method is passed to the superclass
first. After this, mpegvideo.datatype loads it's preference file
(and the sound file, if one was specified) and starts it work on
the video stream (load frames or scan stream for index information).
Any fatal error aborts the load, non-serious errors are reported.
ATTRIBUTES
The following attributes can be specified at creation time.
DTA_SourceType (ULONG) -- Determinates the type of DTA_Handle
attribute. Both DTST_FILE and DTST_RAM are supported.
If any other type was set in a given DTA_SourceType,
OM_NEW will be rejected with result2 == ERROR_OBJECT_WRONG_TYPE.
Defaults to DTST_FILE.
DTA_Handle (BPTR) -- If DTA_SourceType is DTST_FILE, the given file
handle will be used as an mpeg video stream to read in.
DTST_RAM requires that this tag data is NULL !
RESULT
If the object was created a pointer to the object is returned,
otherwise NULL is returned.
mpegvideo.datatype/preferences mpegvideo.datatype/preferences
NAME
preferences
DESCRIPTION
The "ENV:Classes/DataTypes/mpegvideo.prefs" file contains global
settings for the datatype.
The preferences file is an ASCII file containing one line where the
preferences can be set.
It can be superset by a local variable with the same name.
Each line can contain settings, special settings for some projects
can be set using the MATCHPROJECT option.
Lines beginning with a '#' or ';' chars are treated as comments.
Lines are limitted to 256 chars.
TEMPLATE
MATCHPROJECT/K,DEVICE=MPEGDEVICE/K,UNIT=MPEGDEVICEUNIT/K/N,
MODEID/K/N,WIDTH/K/N,HEIGHT/K/N,DEPTH/K/N,DITHER/K,
LUM_RANGE/K/N,CR_RANGE/K/N,CB_RANGE/K/N,COLORERROR/K/N,
PALETTEPERFRAME/S,NOPALETTEPERFRAME/S,GAMMACORRECT/K,CHROMACORRECT/K,
MAXFRAME/K/N,SKIPFRAMES/K/N,FPS/K/N,PFRAMES/S,NOPFRAMES/S,
BFRAMES/S,NOBFRAMES/S,DITHERATPLAYBACKTIME/S,
NODITHERATPLAYBACKTIME/S,SAMPLE/K,VOLUME/K/N,BUFFER/K/N,LOADALL/S,
NOLOADALL/S,USEVMM/S,NOUSEVMM/S,MINTOTALMEM/K/N,IGNOREERRORS/S,
VERBOSE/S,__VERBOSELEVEL/K/N,TRACE/S,NOTRACE/S,PROGRESSGAUGE/S,
NOPROGRESSGAUGE/S,QUALITY/S,NOQUALITY/S,ENCODERPARAMETERS=PARFILE/K,
ENC_REALLOC_LOADFRAME/S,ENC_NO_REALLOC_LOADFRAME/S,
ENC_RECONSTRUCTED_IMAGES/K,ENC_INTRA_QUANT_MAXTRIX_FILE/K,
ENC_NON_INTRA_QUANT_MAXTRIX_FILE/K,ENCODERLOG=ENCODERSTATISTICS/K,
ENC_FIRSTFRAME/K/N,ENC_START_TIMECODE/K,ENC_NUM_GOP_FRAMES/K/N,
ENC_I_P_FRAME_DIST/K/N,ENC_FORCE_MPEG1/S,ENC_FIELD_PICTURES/S,
ENC_FRAME_PICTURES/S,ENC_ASPECT_RATIO_INFORMATION/K,
ENC_FRAME_RATE/K,ENC_BIT_RATE/K,ENC_VBV_BUFFER_SIZE/K/N,
ENC_CONSTRAINED_PARAMETERS_FLAG/S,
ENC_NO_CONSTRAINED_PARAMETERS_FLAG/S,
ENC_PROFILE_ID/K,ENC_LEVEL_ID/K,ENC_PROGRESSIVE_SEQUENCE/S,
ENC_NOPROGRESSIVE_SEQUENCE/S,ENC_CHROMA_FORMAT/K,ENC_VIDEO_FORMAT/K,
ENC_COLOR_PRIMARIES/K,ENC_TRANSFER_CHARACTERISTICS/K,
ENC_MATRIX_COEFFICIENTS/K,ENC_INTRA_DC_PRECISION/K,
ENC_TOP_FIELD_FIRST=ENC_ODD_FIELD_FIRST/S,
ENC_BOTTOM_FIELD_FIRST=ENC_EVEN_FIELD_FIRST/S,
ENC_FRAME_PRED_FRAME_DCT_I/S,ENC_NO_FRAME_PRED_FRAME_DCT_I/S,
ENC_FRAME_PRED_FRAME_DCT_P/S,ENC_NO_FRAME_PRED_FRAME_DCT_P/S,
ENC_FRAME_PRED_FRAME_DCT_B/S,ENC_NO_FRAME_PRED_FRAME_DCT_B/S,
and so on...
MATCHPROJECT -- The settings in this line belongs only to this
project(s), e.g. if the case-insensitive pattern does not match,
this line is ignored.
The maximum length of the pattern is 128 chars.
Defaults to #?, which matches any project.
DEVICE
MPEGDEVICE -- If the Amiga has a "cd32mpeg.device" compatible device
which supports the MPEGCMD_READFRAMEYUV device command,
mpegvideo.datatype cam use this device for decoding
(which may limit to MPEG-1).
EXPERIMENTAL. UNTESTED. But should work...
UNIT
MPEGDEVICEUNIT - Selects the unit of the mpeg decoder device.
Should only be set if you know what you're doing...
MODEID -- Select screen mode id of datatype (will be stored in
ADTA_ModeID). Note that the DOS ReadArgs function used for parsing
fetches a SIGNED long. The bit 31 will be represented by minus
'-'. (example: "MODEID=266240" sets the mode to the A2024 screen
mode id)
Defaults to -1, which means: Use the best screenmode available
for the given width, height and depth.
WIDTH -- Set the animation's width. The video will be scaled to this
width.
Defaults to 0, which means: Use video's width.
HEIGHT -- Set the animation's height. The video will be scaled to this
height.
Defaults to 0, which means: Use video's height.
DEPTH -- depth for the selected scaling mode
A value describing the "depth" of the animation.
1 upto 8 are valid, under- or overflows will be truncated
to the maximum supported.
The default depth will be selected by the DITHER mode.
DITHER -- dither type, one of
MONO -- monocrome output, 1 bit
MONO_THRESHOLD -- monocrome output with threshold, 1 bit
GRAY -- grayscale output (broken in V2.1)
HAM -- ham ham6/ham8 etc. (default)
EHB -- extra halfbright (broken in V2.1)
COLOR -- color output (broken in V2.1)
ORDERED -- ordered dither
24BITCHUNKY -- true color, 24 bit
16BITCHUNKY -- true color, 16 bit
24BITPLANAR -- true color, 24 bit
YUV420 -- YUV420 bitmap
MONO
MONO_THRESHOLD -- Monocrome output modes, both in two
colors (black/white).
GRAY is the grayscale mode.
If no depth is given, the depth default to 5 (32 colors).
HAM (hold-and-modify) mode: Either HAM6 or HAM8, set by the depth
option. If no depth is given, this defaults to 6 for OCS/ECS
and 8 for AGA/AAA machines.
This is the default dither mode if no DITHER option is given.
EHB (extra halfbright mode):
If no depth is given, the depth default to 6 (32/64 colors).
not implemented yet
COLOR remaps the frames into a fixed color space.
If no depth is given, the depth default to 8 (256 colors).
ORDERED uses ordered dithering.
If no depth is given, the depth default to 8 (256 colors).
24BITCHUNKY uses chunkypixel CyberGFX bitmaps
Fixed to a depth of 32 (XRGB).
Requires at least animation.datatype V41.3.
16BITCHUNKY uses chunkypixel CyberGFX bitmaps
Fixed to a depth of 16 (XRGB).
Requires at least animation.datatype V41.3.
24BITPLANAR uses a planar 24 bit depth bitmap (non-interleaved)
Fixed to a depth of 24 (RGB).
Requires at least animation.datatype V41.3.
YUV420 uses a Picasso96 YUV bitmap.
Experimental. Not tested yet. Currently limitted to MPEG-1.
Requires a newer Picasso96 version which supports remapping
YUV -> RGB bitmaps, otherwise you don't see any display.
Requires at least animation.datatype V41.3.
Defaults to HAM.
LUM_RANGE -- sets the number of colors assigned to the luminance
component when dithering the image. The product of LUM_RANGE,
CR_RANGE and CB_RANGE should be less than the number of colors
selected by the DEPTH option.
This will only affect ORDERED and COLOR dithering and the base
palette of the DICECOLOR remapping.
Any value between 1 upto 255 is allowed, 0 is treated as 1.
Defaults: see DEFAULTS section below
CR_RANGE -- sets the number of colors assigned to the red component of
the chrominace range when dithering the image. The product of
LUM_RANGE, CR_RANGE and CB_RANGE should be less than the number of
colors selected by the DEPTH option.
This will only affect ORDERED and COLOR dithering and the base
palette of the DICECOLOR remapping.
Any value between 1 upto 255 is allowed, 0 is treated as 1.
Defaults: see DEFAULTS section below
CB_RANGE -- sets the number of colors assigned to the blue component
of the chrominace range when dithering the image. The product of
LUM_RANGE, CR_RANGE and CB_RANGE should be less than the number of
colors selected by the DEPTH option.
This will only affect ORDERED and COLOR dithering and the base
palette of the DICECOLOR remapping.
Any value between 1 upto 255 is allowed, 0 is treated as 1.
Defaults: see DEFAULTS section below
COLORERROR -- Set the error range when allocating colors.
The error range is used for color matching
(like this: if( ABS( (pixel . red) - (colormap . red) ) +
ABS( <dito. green> ) + ABS( <dito. blue> )
< colorerror ) then use this color index).
A low value (0) means high quality remapping and slow remapping,
high values (50) means low quality (using less color indexes).
Defaults to 0.
PALETTEPERFRAME -- Create a own palette for each frame.
__Currently__ a NOP for HAM dithering and always a NOP
for all direct-RGB output modes (24BITCHUNKY, 16BITCHUNKY,
24BITPLANAR).
Note that this option requires animation.datatype V41 to work.
NOPALETTERPERFRAME -- Turns PALETTEPERFRAME switch off.
GAMMACORRECT -- Gamma correction value (defined as fixed point
number).
Defaults to "1.0".
CHROMACORRECT -- Chroma correction value (defined as fixed point
number).
Defaults to "1.0".
MAXFRAME -- Maximum number of frames to load.
Defaults to 0, which means: Load all frames.
SKIPFRAMES -- Load only the n-th frame of an animation.
The internal timing (e.g. time code) is not affected, so
the FPS value will be correct.
Defaults to 0 which means: Skip no frame.
Note that this option requires animation.datatype V41 to work
properly.
FPS -- frames per second
Defaults to 0, which means: overtake fps rate from video stream.
Setting the FPS value also affects an attched sound. The period
of the sample (e.g. the playback speed) will everytimes as long
as the frame is displayed.
PFRAMES -- Turns off the NOPFRAMES option.
Default is on.
NOPFRAMES -- ignore any type P frames (predicted frames) when loading.
BFRAMES -- Turns off the NOBFRAMES option.
Default is on.
NOBFRAMES -- ignore any type B frames (bidirectional frames) when
loading.
Default is off.
DITHERATPLAYBACKTIME -- YUV -> RGB dithering is done at playback
(ADTM_LOADFRAME) time.
This saves time during decoding (LOADALL mode) and causes
smoother loading on NOLOADALL mode. But only a mc68040 or higher
should use this option.
This option is also neccesary if you use CyberGFX output modes
and wants to use VMM (CyberGFX bitmaps cannot be in VMM memory,
but the YUV data can be there...).
NODITHERATPLAYBACKTIME -- Turns the DITHERATPLAYBACKTIME option off.
SAMPLE -- Attach the given sample to the animation. The sample will
be loaded using datatypes (GID_SOUND).
Only one sample can be attached to one video stream, any following
attempt to attach the sample will be ignored.
Default: no sample
VOLUME -- Volume of the sound when playing.
Defaults to 63, which is the maximum. A value greater than 64 will
be set to 63.
BUFFER -- read buffers size. Minimum is 2048, lower values are set to
2048.
Defaults to 0.5% of the file size, but at least 2048 and max.
16384 bytes.
LOADALL -- load all frames before displaying it.
NOLOADALL -- turns off LOADALL switch (decode during playback).
USEVMM -- Use Martin Apel's vmm.library for bitmaps.
The verbose output will tell you if VMM memory will be used or
not.
The DITHERATPLAYBACKTIME option is required if you use
CyberGFX output modes and wants to use VMM (CyberGFX bitmaps
cannot be in VMM memory, but the YUV data can be there...).
Default is off.
NOUSEVMM -- Turn VMM usage for bitmaps off.
MINTOTALMEM -- Minimum total memory available. If less memory
available, abort loading.
Defaults to 0, which means: Don't use this option.
IGNOREERRORS -- Ignore errors while parsing/decoding etc.
Usefull if a syntax error or read error (which may occur with
some old, buggy CD filesystems) happens.
Default is off.
VERBOSE -- Verbose output. Prints out current frame etc., some
statistical information and maybe, debugging infos.
Verbose output will be printed in a console window
("CON://///auto/wait/close/inactive/MPEG Video DataType").
Default is off.
PROGRESSGAUGE -- Display a load progress gauge.
Default is on.
NOPROGRESSGAUGE -- Disables the progress gauge which is displayed
during loading of the mpeg stream.
Default is off.
QUALITY -- If set, mpegvideo.datatype uses floating-point dct
decoding, which results in a better output quality.
(broken in V2.1)
Default is off.
NOQUALITY -- Turns QUALITY switch off.
Default is on.
And here comes the encoder options:
ENCODERPARAMETERS
PARFILE -- "mpeg2enc" like encoder parameters file
Note that some options (like width/height) are ignored.
ENC_REALLOC_LOADFRAME -- Enables "realloc"-like loading from
souce object. This option allows that a ADTM_LOADFRAME
from the source object can reuse data from a previous
ADTM_LOADFRAME call.
This option is on per default.
ENC_NO_REALLOC_UNLOADFRAME -- Disables "realloc"-like loading from
source object.
This option was introduced for debugging and should not
be set, otherwise loading from the source object may be much
slower.
ENC_RECONSTRUCTED_IMAGES --
This user parameter tells the encoder what name to give the
reconstructed frames. These frames are identical to frame
reconstructions of decoders following normative guidelines
(except of course for differences caused by different IDCT
implementation).
The reconstructed frames are always stored in Y,U,V format.
ENC_INTRA_QUANT_MAXTRIX_FILE -- This option specifies a file
containing a custom intra quantization matrix to be used instead
of the default matrix specified in ISO/IEC 13818-2 and
11172-2. This file has to contain 64 integer values
(range 1...255) separated by white space (blank, tab, or
newline), one corresponding to each of the 64 DCT coefficients.
They are ordered line by line, i.e. v-u frequency matrix order
(not by the zig-zag pattern used for transmission). The example
file "intra.mat" contains the default matrix as a starting point
for customization. It is neither necessary or recommended to
specify the default matrix explicitly.
Large values correspond to coarse quantization and consequently
more noise at that particular spatial frequency.
For the intra quantization matrix, the first value in the file
(DC value) is ignored. Use the parameter intra_dc_precision (see
below) to define the quantization of the DC value.
ENC_NON_INTRA_QUANT_MAXTRIX_FILE -- This option follows the same
rules as described for the above intra quant matrix parameter,
but specifies the file for the NON-INTRA coded (predicted /
interpolated) blocks. In this case the first coefficient of the
matrix is NOT ignored.
The default matrix uses a constant value of 16 for all 64
coefficients. (a flat matrix is thought to statistically minimize
mean square error).
The example file "inter.mat" contains an alternate matrix, used
in the MPEG-2 test model.
ENC_START_TIMECODE -- This option is used to set the timecode encoded
into the first 'Group of Pictures' header. The format is based
on the SMPTE style:
hh:mm:ss:ff (hh=hour, mm=minute, ss=second, ff=frame
(0..picture_rate-1)
ENC_NUM_GOP_FRAMES -- This option defines the distance between I
frames (and 'Group of Pictures' headers). Common values are 15
for 30 Hz video and 12 for 25 Hz video.
ENC_I_P_FRAME_DIST -- Distance between consecutive I or P frames.
Usually set to 3. ENC_NUM_GOP_FRAMES has to be a multiple of
ENC_I_P_FRAME_DIST. ENC_I_P_FRAME_DIST = 1 means no B
frames in the sequence. (in a future edition of this program,
ENC_I_P_FRAME_DIST=0 will mean only I frames).
ENC_FORCE_MPEG1 -- Set this switch if you want to generate an MPEG-1
sequence. In this case some of the subsequent MPEG-2 specific
values are ignored.
ENC_FIELD_PICTURES -- Selects frame picture coding, in which both
fields of a frame are coded simultaneously.
This switch is the reverse of the ENC_FRAME_PICTURES switch.
ENC_FRAME_PICTURES -- Select field picture coding, where fields are
coded separately. This option is permitted for interlaced
video only.
This switch is the reverse of the ENC_FIELD_PICTURES switch.
ENC_ASPECT_RATIO_INFORMATION -- Defines the display aspect ratio.
One of SQUARE_PELS or 1_1_DISPLAY or CODE_1
4_3_DISPLAY or CODE_2
16_9_DISPLAY or CODE_3
2_21_1_DISPLAY or CODE_4
MPEG-1 uses a different coding of aspect ratios. In this cases
codes CODE_1 to CODE_14 are valid.
ENC_FRAME_RATE -- Defines the frame rate (for interlaced sequences:
field rate is twice the frame rate).
Frames/sec Meaning
---------- -----------------------------------------------
24000/1001 23.976 fps -- NTSC encapsulated film rate
24 Standard international cinema film rate
25 PAL (625/50) video frame rate
30000/1001 29.97 -- NTSC video frame rate
30 NTSC drop-frame (525/60) video frame rate
50 double frame rate/progressive PAL
60000/1001 double frame rate NTSC
60 double frame rate drop-frame NTSC
one of
----------+----------+---------------------------------------
24000_1001|23_976_FPS|NTSC_ENCAPSULATED_FILM_RATE
24 |24_FPS |STANDARD_INTERNATIONAL_CINEMA_FILM_RATE
25 |25_FPS |PAL_VIDEO_FRAME_RATE
30000_1001|29_97_FPS |NTSC_VIDEO_FRAME_RATE
30 |30_FPS |NTSC_DROP_FRAME_VIDEO_FRAME_RATE
50 |50_FPS |DOUBLE_FRAME_RATE or PROGRESSIVE_PAL
60000_1001|59_94_FPS |DOUBLE_FRAME_RATE_NTSC
60 |60_FPS |DOUBLE_FRAME_RATE_DROP_FRAME_NTSC
15 |15_FPS |XING_RATE
Or CODE_1 upto CODE_9.
Note that the XING code 9 with 15 fps is not implemented yet.
ENC_BIT_RATE -- A positive floating point value specifying the
target bitrate. In units of bits/sec.
ENC_VBV_BUFFER_SIZE -- Specifies, according to the Video Buffering
Verifier decoder model, the size of the bitstream input buffer
required in downstream decoders in order for the sequence to be
decoded without underflows or or overflows. You probably will
wish to leave this value at 112 for MPEG-2 Main Profile at Main
Level, and 20 for Constrained Parameters Bitstreams MPEG-1.
ENC_CONSTRAINED_PARAMETERS_FLAG -- Set this switch if you encode an
MPEG-1 sequence which meets the parameter limits defined in
ISO/IEC 11172-2 for constrained parameter bitstreams:
horizontal_size <= 768
vertical_size <= 576
picture_area <= 396 macroblocks
pixel_rate <= 396x25 macroblocks per second
vbv_buffer_size <= 20x16384 bit
bitrate <= 1856000 bits/second
motion vector range <= -64...63.5
ENC_NO_CONSTRAINED_PARAMETERS_FLAG -- Turns the
ENC_CONSTRAINED_PARAMETERS_FLAG off;
set this option always for MPEG-2 !
ENC_PROFILE_ID -- Specifies the subset of the MPEG-2 syntax required
for decoding the sequence. All MPEG-2 sequences generated by the
current version of the encoder are either Main Profile or Simple
Profile sequences.
one of RESERVED_0
HIGH
SPATIALLY or SPATIALLY_SCALABLE
SNR or SNR_SCALABLE
MAIN
SIMPLE
RESERVED_6
RESERVED_7
RESERVED_8
RESERVED_9
RESERVED_10
RESERVED_11
RESERVED_12
RESERVED_13
RESERVED_14
RESERVED_15
Or use CODE_0 up to CODE_15.
ENC_LEVEL_ID -- Specifies coded parameter constraints, such as
bitrate, sample rate, and maximum allowed motion vector range.
one of RESERVED_0
RESERVED_1
RESERVED_2
RESERVED_3
HIGH
RESERVED_5
HIGH_1440
RESERVED_7
MAIN
RESERVED_9
LOW
RESERVED_11
RESERVED_12
RESERVED_13
RESERVED_14
RESERVED_15
Or use CODE_0 upto CODE_15.
ENC_PROGRESSIVE_SEQUENCE -- Set this switch for progressive video
(e.g. film source).
This switch is the reverse of the ENC_NOPROGRESSIVE_SEQUENCE
switch.
ENC_NOPROGRESSIVE_SEQUENCE -- Set this switch in the case of a
sequences containing interlaced video (e.g. video camera source).
This switch is the reverse of the ENC_PROGRESSIVE_SEQUENCE
switch.
ENC_CHROMA_FORMAT -- Specifies the resolution of chrominance data
one of 420, 422, or 444.
Or use CODE_1, CODE_2, CODE_3.
ENC_VIDEO_FORMAT -- Specifies the video format
One of COMP, PAL, NTSC, SECAM, MAC, UNSPEC
Or use CODE_0 upto CODE_5.
ENC_COLOR_PRIMARIES -- Specifies the x, y chromaticity coordinates of
the source primaries.
One of ITU-R_Rec._709
unspecified
ITU-R_Rec._624-4_System_M
ITU-R_Rec._624-4_System_B_G
SMPTE_170M
SMPTE_240M
Or use CODE_1 up to CODE_7.
ENC_TRANSFER_CHARACTERISTICS -- Specifies the opto-electronic transfer
characteristic of the source picture.
One of ITU-R_Rec._709
unspecified
ITU-R_Rec._624-4_System_M
ITU-R_Rec._624-4_System_B_G
SMPTE_170M
SMPTE_240M
LINEAR_TRANSFER_CHARACTERISTICS
Or use CODE_1 up to CODE_8.
ENC_MATRIX_COEFFICIENTS -- Specifies the matrix coefficients used in
deriving luminance and chrominance signals from the green,
blue, and red primaries.
One of ITU-R_Rec._709
unspecified
FCC
ITU-R_Rec._624-4_System_B_G
SMPTE_170M
SMPTE_240M
Or use CODE_1 up to CODE_7.
ENC_INTRA_DC_PRECISION -- Specifies the effective precision of the
DC coefficient in MPEG-2 intra coded macroblocks. 10-bits usually
achieves quality saturation.
One of 8, 9, 10, 11 or 8_BIT, 9_BIT and so on...
Or use CODE_0 up to CODE_3.
ENC_TOP_FIELD_FIRST
ENC_ODD_FIELD_FIRST -- Specifies that the top fields of an interlaced
frame comes earlier. The top field corresponds to what is often
called the "odd field," and the bottom field is also sometimes
called the "even field."
This switch is the revers of the ENC_BOTTOM_FIELD_FIRST option.
ENC_BOTTOM_FIELD_FIRST
ENC_EVEN_FIELD_FIRST -- Specifies that the bottom fields of an
interlaced frame comes earlier. The top field corresponds to what
is often called the "odd field," and the bottom field is also
sometimes called the "even field."
This switch is the revers of the ENC_BOTTOM_FIELD_FIRST option.
ENC_FRAME_PRED_FRAME_DCT_I -- Setting this parameter restricts motion
compensation to frame prediction and DCT to frame DCT.
ENC_NO_FRAME_PRED_FRAME_DCT_I -- Turns ENC_FRAME_PRED_FRAME_DCT_I off.
ENC_FRAME_PRED_FRAME_DCT_P -- Setting this parameter restricts motion
compensation to frame prediction and DCT to frame DCT.
ENC_NO_FRAME_PRED_FRAME_DCT_P -- Turns ENC_FRAME_PRED_FRAME_DCT_P off.
ENC_FRAME_PRED_FRAME_DCT_B -- Setting this parameter restricts motion
compensation to frame prediction and DCT to frame DCT.
ENC_NO_FRAME_PRED_FRAME_DCT_B -- Turns ENC_FRAME_PRED_FRAME_DCT_B
off.
DEFAULTS
Defaults for the options are noted above.
LUM_RANGE, CR_RANGE, CB_RANGE options have defaults based on the
depth:
depth | LUM_RANGE | CR_RANGE | CB_RANGE | comment
------+-----------+----------+----------+----------------------
8 | 7 | 6 | 6 | color output
7 | 5 | 5 | 5 | color output
6 | 4 | 4 | 4 | color output
5 | 3 | 3 | 3 | color output
4 | 16 | 1 | 1 | grayscale output
3 | 8 | 1 | 1 | grayscale output
2 | 4 | 1 | 1 | grayscale output
1 | 2 | 1 | 1 | black & white output
NOTE
An invalid prefs file line will force the default settings for this
line and the VERBOSE option.
BUGS
- Low memory may cause that the prefs file won't be parsed.
- Lines are limitted to 256 chars
SEE ALSO
mssg/mpeg2enc.doc